package com.itheima.web;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.itheima.bean.Category;
import com.itheima.common.PageParam;
import com.itheima.common.R;
import com.itheima.service.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/*
    该类用来处理一切与分类有关的请求
 */
@RequestMapping("/category")
@RestController
public class CategoryController {

    @Autowired
    private CategoryService categoryService;

    /**
     * 添加分类
     * @param category
     * @return
     */
    @PostMapping
    public R<String> add(@RequestBody Category category){

        //1. 调用service
        int row = categoryService.add(category);

        //2. 响应结果
        if(row > 0){
            return R.success("添加分类成功！");
        }else{
            return R.error("添加分类失败！");
        }
    }


    /**
     * 分页查询
     * @param pageParam
     * @return
     */
    @GetMapping("/page")
    public R<IPage<Category>> findPage(PageParam pageParam){

        //1. 调用service
        IPage<Category> page = categoryService.findPage(pageParam);

        //2. 响应结果
        return R.success(page);
    }

    /**
     * 删除分类
     * @param id
     * @return
     */
    @DeleteMapping
    public R<String> delete(long id){

        //1. 调用service
        int row = categoryService.delete(id);

        //2. 响应结果
        if(row > 0){
            return R.success("删除分类成功！");
        }else{
            return R.error("删除分类失败！");
        }
    }

    /**
     * 更新分类
     * @param category
     * @return
     */
    @PutMapping
    public R<String> update(@RequestBody Category category){

        //1. 调用service
        int row = categoryService.update(category);

        //2. 响应结果
        if(row > 0){
            return R.success("更新分类成功！");
        }else{
            return R.error("更新分类失败！");
        }
    }


    /**
     * 根据类型值查询出来分类数据
     * @param type
     *      1. 分类的类型值， 1： 菜品分类 2：套餐分类
     *      2. 把参数类型标记成 Integer类型，这样这个方法就能匹配后端，也能匹配前端
     *          2.1 如果后端想看某一种分类数据，那么可以把分类类型值传递过来
     *              比如： 想看菜品的所有分类： 那么传递 1 过来
     *              比如： 想看套餐的所有分类： 那么传递 2 过来
     *          2.2 前端想看的是所有的分类，应该传什么过来？
     *              什么都不用传递过来！当上面都不传递的时候，接收到的type 将会是 null!
     *
     * @return
     */
    @GetMapping("/list")
    public R findByType(Integer type){

        //1. 调用service
        List<Category> categoryList = categoryService.findByType(type);

        //2. 响应结果
        return R.success(categoryList);
    }


}
